<?php
class EquiposController extends AppController {

	var $name = 'Equipos';
	var $uses = array('Equipo','User');
	var $helpers = array('Html', 'Form');
	var $components = array('RequestHandler');
	
	function beforeFilter() {
		parent::beforeFilter(); 
		$this->Auth->allowedActions = array('listar');
	}
	/*Lista Todos los equipos activos*/
	function listar() {
		$usuario=$this->Auth->user();
		$grupo_id=$usuario['User']['grupo_id'];
		if($this->Auth->user()){ //si el usuario esta autenticado
			
			/* PARA VER LAS IMAGENES BLOB falta poco pero no quise mas perder tiempo con esto x el momento
			Configure::write('debug', 0);
			$file = $this->Equipo->findByEquipo($id);
			header("Content-type: ".$file['bandera']['png']);
			//$this->set('foto',$file['Equipo']['bandera']);
			echo $file['Equipo']['bandera'];*/
			$this->Equipo->recursive = 1;
			$this->set('usuario', $this->Auth->user());
			$this->set('grupo_id', $this->Auth->user('grupo_id'));//el grupo del user
			$this->set('equipos', $this->paginate('Equipo', array('Equipo.estado >' => 0)));
			
		}else{
			
			$this->Session->setFlash(__('Debe estar logueado para Ingresar', true));
			$this->redirect(array('controller' => 'users', 'action' => 'login'));
		}
	}
	
/* Controlado por ACL, a partir de premium, solo mi equipo*/
	function index(){
		$this->set('usuario', $this->Auth->user());
		$this->set('grupo_id', $this->Auth->user('grupo_id'));//el grupo del user
		if($this->Auth->user()){ //si el usuario esta autenticado
			$user=$this->Equipo->User->findbyUser($this->Auth->user('user'));
			//print_r($user);
			$team=$this->Equipo->find('first',array('conditions'=> array('Equipo.equipo'=>$user['User']['equipo_id'])));
			//print_r($team);
			if($team){
				/* PARA VER LAS IMAGENES BLOB falta poco pero no quise mas perder tiempo con esto x el momento
				Configure::write('debug', 0);
				$file = $this->Equipo->findByEquipo($id);
				header("Content-type: ".$file['bandera']['png']);
				//$this->set('foto',$file['Equipo']['bandera']);
				echo $file['Equipo']['bandera'];*/
				$this->set('usuario', $user);
				$this->set('nombresM',$this->Equipo->nombresMiembros($team['Equipo']['equipo']));
				$this->set('miEquipo', $team);
			}else{
				$this->Session->setFlash(__('No posee equipo como para ver los datos del mismo', true));
				$this->redirect(array('controller' => 'equipos', 'action' => 'listar'));
			}
		}else{
			
			$this->Session->setFlash(__('Debe estar logueado para Ingresar', true));
			$this->redirect(array('controller' => 'users', 'action' => 'login'));
		}
	}

	function view($id = null) {
		if (!$id) {
			$this->Session->setFlash(__('Invalid Equipo.', true));
			$this->redirect(array('action'=>'index'));
		}
		
		$this->set('equipo', $this->Equipo->read(null, $id));
	}
	
/* Controlado por acl, a partir de Premium. Para unirse a un Equipo el duenho del equipo tuvo que haber mandado una invitacion
al usuario. La funcion verifica que no haya sobrepasado el limite de usuarios en el equipo.
Parametros:
$id= el identificador del equipo a unirse
*/
	function join($id = null){
		if(!$id){
			$this->Session->setFlash(__('Equipo Invalido', true));
			$this->redirect(array('action'=>'listar'));
		}else{
			$equipo=$this->Equipo->findByEquipo($id);//existe el equipo
			if($equipo){
				if($equipo['Equipo']['cantjugadores'] < 6){ // 6 jugadores como maximo puede haber en un equipo
					if($this->Auth->user()){// El usuario debe estar autenticado
						$mensaje=ClassRegistry::init('Mensaje')->find('first',array('conditions'=>array('Mensaje.localidad'=>$equipo['Equipo']['equipo'], 'Mensaje.destino'=>$this->Auth->user('user'), 'Mensaje.tipo'=> 1)));
						if(!$mensaje){
							$this->Session->setFlash(__('Usted no ha recibido una invitacion para unirse al equipo', true));
							$this->redirect(array('action'=>'listar'));
						}
						$user=$this->Equipo->User->findByUser($this->Auth->user('user'));//se obtiene el id del equipo del usuario
						if($user['User']['equipo_id']){
							$equipoOwner=$this->Equipo->findByEquipo($user['User']['equipo_id']);//se obtienen los datos del equipo
							if($equipoOwner){
								if($equipoOwner['Equipo']['user_id']==$this->Auth->user('user')){ //si el user q desea salir es el duenho
									$this->Equipo->id=$equipoOwner['Equipo']['equipo'];
									$this->Equipo->saveField('estado',0);
								}
							}
						}
						$this->Equipo->User->id=$this->Auth->user('user');
						if($this->Equipo->User->saveField('equipo_id',$id)){
							$this->Equipo->updateCantUsuarios($this->Auth->user('user'),1);//aumenta la cantjugadores del equipo
							$this->Session->setFlash(__('Se unio al equipo', true));
							$this->redirect(array('action'=>'index'));
						}else{
							$this->Session->setFlash(__('No se pudo unir al equipo', true));
							$this->redirect(array('action'=>'listar'));
						}
					}else{
						$this->Session->setFlash(__('Necesita estar logueado', true));
						$this->redirect(array('controller' => 'users','action'=>'login'));
					}
				}else{
					$this->Session->setFlash(__('No puede unirse al equipo, Equipo lleno.', true));
					$this->redirect(array('action'=>'listar'));
				}
			}else{
				$this->Session->setFlash(__('Equipo Invalido', true));
				$this->redirect(array('action'=>'listar'));
			}
		}
		$this->redirect(array('action'=>'listar'));
	}
	
/*Controlado por ACL. A partir de Premium
Para crear un nuevo equipo. El usuario no tiene que ser duenho de un equipo. Si pertenecia a un equipo, pero no era duenho, igual
puede crear un nuevo equipo. Pero haciendolo renunciaria a su equipo.
Se verifica que no exista un equipo activo con mismo nombre.
Mediante trigger se actualiza la tabla users con el id del equipo que creo.
*/	
	function add() {
		//print_r($this->Auth->user('user'));
		//print_r($tieneEquipo=$this->Equipo->MiEquipoId($this->Auth->user('user')));
		$team=$this->Equipo->equipoOwner($this->Auth->user('user'));
		if(!$team){//si no es duenho de un equipo
			if (!empty($this->data)) {
				$equipo=$this->Equipo->find('first',array('conditions'=>array('Equipo.estado >'=> 0,'Equipo.nombre'=> $this->data['Equipo']['nombre'])));
				if($equipo){
					$this->Session->setFlash(__('Existe un equipo activo con el mismo nombre. Por favor cambie de nombre', true));
					$this->data['Equipo']['nombre']='';
				}else{
					/*chequeamos la imagen cargada por el usuario, traemos la fuente donde se encuentra la imagen*/
					if($this->data['Equipo']['photo_data']){
						//print_r($this->data['Equipo']['photo_data']);
						$imageSource = $this->data['Equipo']['photo_data']['tmp_name'];
						$this->data['Equipo']['photo_data'] = null;
						/*abrimos el archivo*/
						$fp = fopen($imageSource, "rb");
						if($fp){
							/*leemos todo el archivo y guardamos en la variable archivo*/
							$archivo = fread($fp, filesize($imageSource));
							//guardamos el archivo(los unos y ceros de la imagen)
							$this->data['Equipo']['photo_data'] = $archivo;
							//print_r($this->data['Equipo']['photo_data']);
							/*cerramos el archivo*/
							fclose($fp);
						}
					}//else{
						if($this->data['Equipo']['photo_data'] == null)
							$this->data['Equipo']['bandera'] = rand(1,10);
					//}
					$this->data['Equipo']['user_id']=$this->Auth->user('user');
					$this->data['Equipo']['fechacreacion']=array('day'=> date('d'),'month'=> date('m'), 'year' => date('Y'));
					
					//print_r($this->data);
					$this->Equipo->create();
					if ($this->Equipo->save($this->data)) {
						$this->Session->setFlash(__('El Equipo ha sido guardado.', true));
						$this->redirect(array('action'=>'index'));
					} else {
						$this->Session->setFlash(__('No se pudo guardar. Intente de nuevo.', true));
						
					}
				}
			}
		}else{
			$this->Session->setFlash(__('Usted es duenho de un equipo. Debe eliminar su equipo.', true));
			$this->redirect(array('action' => 'index'));
		}
	}

/*Controlado por ACL. a partir de premium.
Para modificar el equipo.
Solo el duenho del equipo puede modificar el equipo
.*/
	function edit() {
		//obtiene el equipo de user
		$team=$this->Equipo->equipoOwner($this->Auth->user('user'));
		if(!$team){
			$this->Session->setFlash(__('No es duenho de un equipo. No puede modificar', true));
			$this->redirect(array('action'=>'index'));
		}
		if (!empty($this->data)) {
			
				/*chequeamos la imagen cargada por el usuario, traemos la fuente donde se encuentra la imagen*/
				if($this->data['Equipo']['photo_data']){
					//print_r($this->data['Equipo']['photo_data']);
					$imageSource = $this->data['Equipo']['photo_data']['tmp_name'];
					$this->data['Equipo']['photo_data'] = null;
					/*abrimos el archivo*/
					$fp = fopen($imageSource, "rb");
					if($fp){
						/*leemos todo el archivo y guardamos en la variable archivo*/
						$archivo = fread($fp, filesize($imageSource));
						//guardamos el archivo(los unos y ceros de la imagen)
						$this->data['Equipo']['photo_data'] = $archivo;
						//print_r($this->data['Equipo']['photo_data']);
						/*cerramos el archivo*/
						fclose($fp);
					}
				}//else{
				//if($this->data['Equipo']['photo_data'] == null)
				//	$this->data['Equipo']['bandera'] = rand(1,10);
							
				$this->Equipo->id = $team;
				//guardamos el nuevo nombre del equipo
				if($this->Equipo->saveField('photo_data', $this->data['Equipo']['photo_data'], true)){
					$this->Session->setFlash(__('Se ha actualizado', true));
					$this->redirect(array('controller'=>'Equipos','action'=>'index'));						
					
				}else{
					$this->Session->setFlash(__('No se ha actualizado', true));
				}

				
		}
		if (empty($this->data)) {
			$this->data = $team;
		}
	}
	
/*Controlado por acl: a partir de premium.
Se utiliza cuando un usuario desea salir del equipo.
1) Si el usuario es el duenho del equipo. El equipo queda deshabilitado (Equipo.estado=0) No se elimina con el fin de almacenar
sus estadisticas. Y todos los usuarios que pertenecian a el salen tambien del equipo.
2) Si un usuario que pertenece a un equipo, pero no es duenho desea salir. Entonces sale sin deshabilitar el equipo. Los demas
usuarios siguen en el equipo.
*/
	function salir(){
		$user=$this->Equipo->User->findByUser($this->Auth->user('user'));//se obtiene el id del equipo del usuario
		if(!$user['User']['equipo_id']) {
			$this->Session->setFlash(__('Usted no pertenece a ningun equipo', true));
			$this->redirect(array('action'=>'listar'));
		}
		$equipo=$this->Equipo->findByEquipo($user['User']['equipo_id']);//se obtienen los datos del equipo
		if(!$equipo) {
			$this->Session->setFlash(__('El equipo es Invalido', true));
			$this->redirect(array('action'=>'listar'));
		}
		if($equipo['Equipo']['user_id']==$this->Auth->user('user')){ //si el user q desea salir es el duenho
			$this->Equipo->id=$equipo['Equipo']['equipo'];
			if($this->Equipo->saveField('estado',0)){
				//se eliminan los integrantes del equipo
				$this->Equipo->eliminarIntegrantes($equipo['Equipo']['equipo']);
				$this->Session->setFlash(__('Ya no tiene equipo.', true));
				$this->redirect(array('action'=>'listar'));
			}else{
				$this->Session->setFlash(__('No pudo salir del equipo. Sigue siendo el duenho', true));
				$this->redirect(array('action'=>'index'));
			}
		}else{ // si solo pertenece a un equipo
			$this->Equipo->updateCantUsuarios($this->Auth->user('user'),2);//disminuye la cantjugadores del equipo
			$this->Equipo->User->id=$this->Auth->user('user');
			if($this->Equipo->User->saveField('equipo_id',null)){
				$this->Session->setFlash(__('Ha salido del equipo', true));
				$this->redirect(array('action'=>'listar'));
			}else{
				$this->Session->setFlash(__('No pudo salir del equipo, Intente de vuelta', true));
				$this->redirect(array('action'=>'index'));
			}
		}	
	}

/*
A partir de Premium
Ajax call
Funcion llamada desde la vista /users/estadisticasGeneral.ctp, obtiene la estadisticas de equipos
Utiliza un procedimiento topPorcentajeWinners() para obtener los datos pedidos
	Parametros:
$tipo=indica la consulta deseada.
*/	
	function estadisticaGeneral($tipo=1){
		if($tipo==1){
			$equipos=$this->Equipo->topPorcentajeWinners(1);
			$this->set('titulo', "Top 30 equipos mas puntos");
			$this->set('columna', "Partidos jugados");
		}elseif($tipo==2){
			$equipos=$this->Equipo->topPorcentajeWinners(2);
			$this->set('titulo', "Top 30 equipos con mayor cantidad de partidos jugados");
			$this->set('columna', "Partidos jugados");
		}elseif($tipo==3){
			$equipos=$this->Equipo->topPorcentajeWinners(3);
			$this->set('titulo', "Top 30 torneos con mayor cantidad de partidos ganados");
			$this->set('columna', "Partidos ganados");
		}elseif($tipo==4){
			$equipos=$this->Equipo->topPorcentajeWinners(4);
			$this->set('titulo', "Top 30 torneos con mayor cantidad de partidos empatados");
			$this->set('columna', "Partidos empatados");
		}elseif($tipo==5){
			$equipos=$this->Equipo->topPorcentajeWinners(5);
			$this->set('titulo', "Top 30 usuarios con mayor porcentaje de ganados (Partidos Ganados/ Partidos Jugados)");
			$this->set('columna', "Porcentaje");
		}elseif($tipo==7){
			$equipos=$this->Equipo->topPorcentajeWinners(7);
			$this->set('titulo', "Top 30 equipos mas duraderos");
			$this->set('columna', "Partidos jugados");
		}
		$this->set('tipo', $tipo);
		$this->set('equipos', $equipos);
		$this->render('show_estadistica');
	}
	
	/* function display() {
		$id=1;
    Configure::write('debug', 0);
    $file = $this->Equipo->findByEquipo($id);
    
    $type = $file['Equipo']['bandera'];
    //print_r($data = base64_decode($file['Equipo']['png']));
    print_r($data=unpack("H*hex", $file['Equipo']['bandera']));
    //$data = base64_decode($file['Equipo']['image']);
	  // header("Content-type: $type");
    header('Content-type: image/png');
    
    echo "$data";
    exit();
  } */
	 function display($id) {
		
		//print_r('hola');
		Configure::write('debug', 0);
		$file = $this->Equipo->findByEquipo($id);
		//print_r($file);
		//$this->set('file', $file);
		header("Content-type: ".$file['bandera']['png']);
		//print_r($file['Equipo']['bandera']);
		$this->set('foto',$file['Equipo']['bandera']);
		echo $file['Equipo']['bandera'];
		//$this->redirect(array('action'=>'index'));
	}
	/*ORIGINAL
	 function display($id) {
    Configure::write('debug', 0);
    $file = $this->Image->findById($id);
    header("Content-type: ".$file['Image']['type']);
    echo $file['Image']['image'];
  } */

}
?>